package com.xxxt.jxj.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xxxt.entity.Comment;
import com.xxxt.entity.Company;
import com.xxxt.entity.Practice;
import com.xxxt.entity.Student;
import com.xxxt.jxj.service.CommentService;
import com.xxxt.utils.DateUtil;
import com.xxxt.utils.UUIDUtil;


@Controller
@RequestMapping("/comment")
public class CommentController {
	@Resource
	private CommentService commentService;
	
	/**
	 * 通过学生和公司查询是否有实习记录
	 * 有才能对其进行发表评论
	 * @param sno
	 * @param companyId
	 * @return
	 */
	@RequestMapping(value="/findPracticeByStudentAndCompany",method=RequestMethod.POST)
	@ResponseBody
	public JSONObject findPracticeByStudentAndCompany(String sno,String companyId){		
		int status=-1;
		JSONObject json = new JSONObject();
		 try {
			List<Practice> list = commentService.findPracticeByStudentAndCompany(sno, companyId);
			 if (list.size()==0) {
				status=0;
				json.put("message", "没在当前公司工作过,无法进行评论");
				json.put("status", status);			
			}
			 else {
					status=1;
					json.put("message", "允许评论");
					json.put("status", status);		
				}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			json.put("status", -1);
			json.put("message", "不允许评论");
			return json;	
		}	
		return json;		
	}
	/**
	 * 发表评论
	 * @param sno
	 * @param companyId
	 * @param content
	 * @return
	 */
	@RequestMapping(value="/insertComment",method=RequestMethod.POST)
	@ResponseBody
	public JSONObject insertComment(String sno,String companyId,String content){
		int status=-1;
		JSONObject json = new JSONObject();
		try {
			Company company = commentService.findCompany(companyId);//获取公司
			Student student = commentService.findStudent(sno);//获取学生
			
			Comment comment = new Comment();
			comment.setCommentId(UUIDUtil.getUUID());
			comment.setCompany(company);
			comment.setStudent(student);
			comment.setCommitTime(DateUtil.getDate());
			String contentNotNUll=content.replaceAll(" ", "");
//			comment.setContent(contentNotNUll);
			comment.setContent(content);
			List<Comment> list = commentService.findCommentContentByStudentAndCompany(sno, companyId);
			Map<String, Object> map=new HashMap<>();
			for(Comment c:list){		
				if (c.getContent().equals(content)) {
					map.put("commentContent",c.getContent());				
				}			
			}
			if (contentNotNUll==null||contentNotNUll.equals("")) {
				json.put("status", 4);
				json.put("message", "评论内容不能都为空");
				return json;
			}
			if (content==null||content.equals("")) {
				json.put("status", 3);
				json.put("message", "评论内容为空");
			}else {
				if (map.get("commentContent")==null||map.get("commentContent").equals(null)) {
					 boolean insertComment = commentService.insertComment(comment);
						if (insertComment) {				
							status=1;
							json.put("comment", comment);
							json.put("status", status);
							json.put("message", "评论添加成功");				
						}
						else {
							status=0;
							json.put("status", status);
							json.put("message", "评论添加失败");	
						}
				}
				//TODO	可以但是没有必要
				else if (map.get("commentContent").equals(content)){
					status=2;
					json.put("status", status);
					json.put("message", "你已经对该公司提交过相同的内容了,请不要重复提交！");
				}
				else {
				    boolean insertComment = commentService.insertComment(comment);
					if (insertComment) {				
						status=1;
						json.put("comment", comment);
						json.put("status", status);
						json.put("message", "评论添加成功");				
					}
					else {
						status=0;
						json.put("status", status);
						json.put("message", "评论添加失败");	
					}
			}
			
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			json.put("status", -1);
			json.put("message", "评论添加失败");
			return json;	
		}
		
		return json;		
	}
	/**
	 * 评论显示到文案上
	 * @param companyId
	 * @param sno
	 * @param content
	 * @param session
	 * @return
	 */
	@RequestMapping(value="/selectComment",method=RequestMethod.POST)
	@ResponseBody
	public JSONObject selectComment(String commentId,HttpSession session){
	
		JSONObject json = new JSONObject();	 
		try {
			Comment comment = commentService.findCommentByCommentId(commentId);
			if (comment!=null) {
				json.put("status", 0);
				json.put("message", "查询成功");
				session.setAttribute("selectComment", comment);
				json.put("comment", comment);			
			}
			else {
				json.put("status", -1);
				json.put("message", "查询失败");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			json.put("status", -1);
			json.put("message", "查询失败");
			return json;	
		}		
		return json;				
	}
	/**
	 * 修改对公司评论
	 * @param companyId
	 * @param sno
	 * @param updateContent
	 * @param session
	 * @return
	 */
	@RequestMapping(value="/updateComment",method=RequestMethod.POST)
	@ResponseBody
	public JSONObject updateComment(String updateContent,String sno,String companyId,HttpSession session){
		int status=-1;	
		JSONObject json = new JSONObject();	
		//查出对象
		try {
			Comment comment=(Comment) session.getAttribute("selectComment");
			//查询符合sno，companyId的列表
			List<Comment> list = commentService.findCommentContentByStudentAndCompany(sno, companyId);
			//循环查看是否有相同的内容
			Map<String, Object> map=new HashMap<>();
			for(Comment c:list){		
				if (c.getContent().equals(updateContent)) {
					map.put("commentContent",c.getContent());				
				}	
			}
			//对null进行处理
			if (map.get("commentContent")==null||map.get("commentContent").equals(null)){
				if (updateContent==null || updateContent.equals(null)) {
					status=0;
					json.put("message", "当前输入为空值,可选择删除操作！");
				}
				else {
					comment.setContent(updateContent);
					comment.setCommitTime(DateUtil.getDate());
					boolean updateComment = commentService.updateComment(comment);
					if (updateComment) {
						status=1;				
						json.put("message", "修改成功");
					}else {
						status=-1;				
						json.put("message", "修改失败");
					}
				}
			}
			else if (map.get("commentContent").equals(updateContent)){
				status=2;
				json.put("status", status);
				json.put("message", "你已经对该公司提交过相同的内容了,请不要重复修改提交！");
			}
				
			else {
				if (updateContent==null || updateContent.equals(null)) {
					status=0;
					json.put("message", "当前输入为空值,可选择删除操作！");
				}else {
					comment.setContent(updateContent);
					comment.setCommitTime(DateUtil.getDate());
					boolean updateComment = commentService.updateComment(comment);
					if (updateComment) {
						status=1;				
						json.put("message", "修改成功");
					}
					else {
						status=-1;				
						json.put("message", "修改失败");
					}
				}
			}
			
			json.put("status", status);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			json.put("status", -1);
			json.put("message", "修改失败");
			return json;	
		}
		return json;				
	}
	/**
	 * 删除评论
	 * @param companyId
	 * @param sno
	 * @param content
	 * @return
	 */
	@RequestMapping(value="/deleteComment",method=RequestMethod.POST)
	@ResponseBody
	public JSONObject deleteComment(String commentId,String sno){	
		JSONObject json = new JSONObject();	
		try {
			Comment comment = commentService.findCommentByCommentId(commentId);
			if (comment.getStudent().getSno()==sno||comment.getStudent().getSno().equals(sno)) {
				boolean deleteComment = commentService.deleteComment(comment);
				if (deleteComment) {
					json.put("status", 0);
					json.put("message", "删除评论成功！");
				}else {
					json.put("status", -1);
					json.put("message", "删除评论失败！");
				}			
			}
			else {
				json.put("status", -2);
				json.put("message", "当前评论不是你提出的，不能进行删除");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			json.put("status", -1);
			json.put("message", "删除评论失败！");
			return json;	
		}
		return json;				
	}
	
	
	/**
	 * 分页查询评论 全部
	 * @param companyId
	 * @param pageSize
	 * @param pageNum
	 * @return
	 */
	@RequestMapping(value="/findCommentByCompany",method=RequestMethod.POST)
	@ResponseBody
	public JSONObject findCommentByCompany(String companyId,int pageNum,int pageSize){
		int status=-1;	
		JSONObject json = new JSONObject();	 
		try {
			PageHelper.startPage(pageNum, pageSize);	 
			List<Comment> list = commentService.findCommentByCompany(companyId, pageNum, pageSize);	     
			if (list.size()!=0) {
			   status=1;
			   PageInfo<Comment> pageInfo = new PageInfo<Comment>(list);
			   json.put("pageInfo", pageInfo);
			   json.put("status", status);
			   json.put("message", "分页查询成功");
				}
			else if (list.size()==0) {
				   status=-2;
				   json.put("status", status);
				   json.put("message", "当前没有评论请添加评论");
			}
			else{
			   status=0;
			   json.put("status", status);
			   json.put("message", "分页查询失败");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			json.put("status", -1);
			json.put("message", "分页查询失败");
			return json;	
		}
		return json;		
	}
	

	/**
	 * 分页查看个人发布的评论
	 * @param companyId
	 * @param pageSize
	 * @param pageNum
	 * @return
	 */
	@RequestMapping(value="/findCommentByCompanyAndSno",method=RequestMethod.POST)
	@ResponseBody
	public JSONObject findCommentByCompanyAndSno(String companyId,String sno,int pageNum,int pageSize){
		int status=-1;	
		JSONObject json = new JSONObject();	 
		try {
			PageHelper.startPage(pageNum, pageSize);	 
			List<Comment> list = commentService.findCommentByCompanyAndSno(sno, companyId, pageSize, pageNum);     
			if (list.size()!=0) {
			   status=1;
			   PageInfo<Comment> pageInfo = new PageInfo<Comment>(list);
			   json.put("pageInfo", pageInfo);
			   json.put("status", status);
			   json.put("message", "分页查询成功");
				}
			else if (list.size()==0) {
				   status=-2;
				   json.put("status", status);
				   json.put("message", "当前你没在当前公司发布评论，请添加评论");
			}
			else{
			   status=0;
			   json.put("status", status);
			   json.put("message", "分页查询失败");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			json.put("status", -1);
			json.put("message", "分页查询失败");
			return json;	
		}
		return json;		
	}
	
	
	
}
